package utils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author Cheng Jun
 * Description: 正则表达式学习笔记，站长工具 http://tool.chinaz.com/regex/
 * https://www.runoob.com/regexp/regexp-syntax.html
 * 直接百度，放弃记忆
 * @version 1.0
 * @date 2021/2/18 15:39
 */
public class RegexExample {

    /**
     * 常用元字符
     * .	匹配除换行符以外的任意字符
     * \w	匹配字母或数字或下划线 与"[A-Za-z0-9_]"等效。
     * \s	匹配任意的空白符
     * \d	匹配数字
     * \b	匹配单词的开始或结束
     * ^	匹配字符串的开始
     * $	匹配字符串的结束
     * <p>
     * 常用限定符
     * *	重复零次或更多次 等价于{0,} *表示无限
     * +	重复一次或更多次 等价于 {1,} + 表示至少有一个，根据+号 中间有个 | 记忆
     * ?	重复零次或一次 等价于 {0,1} ? 表示 有还是没有 所以是 0 或 1
     * {n}	重复n次
     * {n,}	重复n次或更多次
     * {n,m}重复n到m次
     * <p>
     * 常用反义词
     * \W	匹配任意不是字母，数字，下划线的字符
     * \S	匹配任意不是空白符的字符
     * \D	匹配任意非数字的字符
     * \B	匹配不是单词开头或结束的位置
     * [^x]	匹配除了x以外的任意字符
     * [^aeiou]	匹配除了aeiou这几个字母以外的任意字符
     */

    public static void main(String[] args) {
        String regex = "^-?[0-9]+";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher("-11");
        System.out.println(matcher.matches());
        // 强密码(必须包含字母、数字、特殊字符，长度在8-18之间)：https://c.runoob.com/front-end/854/
        System.out.println(Pattern.matches("(?=.*\\d)(?=.*[a-zA-Z])(?=.*[^a-zA-Z0-9]).{8,18}", ".ac"));
    }
}
